home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 2005 October
/
PCWOCT05.iso
/
Software
/
FromTheMag
/
Ant Movie Catalog 3.5.0.2
/
amc_install.exe
/
{app}
/
Scripts
/
SDG (ES).ifs
< prev
next >
Wrap
Text File
|
2005-05-26
|
17KB
|
595 lines
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=cross-syl
Title=SDG (ES)
Description=Movie importation script for SDG
Site=http://www.sdg-es.com
Language=ES
Version=1.0
Requires=3.5.0
Comments=
License=The source code of the script can be used in another program only if full credits to script author and a link to Ant Movie Catalog website are given in the About box or in the documentation of the program.|
GetInfo=1
[Options]
***************************************************)
program SDG;
const
SearchBaseURL = 'http://www.sdg-es.com/web/index.php?module=dp_Elinks&func=buscar&buscar=';
SearchPostFix = '&stype=tit';
BaseURL1 = 'http://www.sdg-es.com/web/';
BaseURL2 = 'http://www.sdg-es.com';
var
MovieName: string;
MovieURL: string;
//------------------------------------------------------------------------------------
function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
var
i: Integer;
begin
Result := -1;
if StartAt < 0 then
StartAt := 0;
for i := StartAt to List.Count-1 do
if Pos(AnsiUpperCase(Pattern), AnsiUpperCase(List.GetString(i))) <> 0 then
begin
Result := i;
Break;
end;
end;
//------------------------------------------------------------------------------------
function TextBetween(var S: string; StartTag: string; EndTag: string): string;
var
InitialPos: Integer;
longEnd: Integer;
begin
InitialPos := Pos(StartTag, S);
Delete(S, 1, InitialPos + Length(StartTag) - 1);
if( Length(EndTag)>0) then
begin
InitialPos := Pos(EndTag, S);
result := copy(S, 1, InitialPos - 1);
Delete(S, 1, InitialPos + 1);
end else
begin
result := copy(S, 1, Length(S));
end
end;
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
function RemoveDot(S: string): string;
var
long, posDot: Integer;
begin
long := Length(S);
posDot := Pos('.',S);
if(posDot=long) then
begin
result := copy(S, 1, long-1);
end else
begin
result := copy(S, 1, long);
end
end;
//------------------------------------------------------------------------------------
procedure AnalyzeMultiplePages(AddressIni: string);
var
Page, PageTemp: TStringList;
LineNr: Integer;
Line, LineAux: string;
MovieTitle, MovieAddress: string;
Elementos: Integer;
Item: string;
morePages: Boolean;
AddressTemp: string;
numPage: string;
begin
Page := TStringList.Create;
Page.Text := GetPage(AddressIni);
if Pos('<title>SDG-ES.com', Page.Text) = 0 then
begin
ShowMessage('No se ha podido establecer la conexion.');
end else
begin
Elementos := 0;
PickTreeClear;
LineNr := FindLine('startnum=', Page, 0);
if (LineNr <> -1) then // Multiples paginas
begin
Line := Page.GetString(LineNr);
LineAux := TextBetween (Line, '"pn-normal"', ' ');
morePages := true;
repeat
if(pos('href="',LineAux)>0) then
begin
AddressTemp := TextBetween (LineAux, 'href="', '">');
HTMLDecode(AddressTemp);
if (Pos('=1',AddressTemp) = Length(AddressTemp)-1) then
begin
PageTemp := Page;
end
else
begin
PageTemp := TStringList.Create;
end
Elementos := AnalyzePage(BaseURL2+AddressTemp, Elementos, PageTemp);
end else
begin
morePages := false;
end
until not(morePages);
end else // Una sola pagina
begin
Elementos := AnalyzePage(AddressIni, Elementos, Page);
end
end
if(Elementos=0) then
begin
ShowMessage('No se han encontrado resultados para "' + MovieName + '"');
end else
begin
if PickTreeExec(AddressIni) then
AnalyzeMoviePage(AddressIni);
end;
Page.Free;
end;
//------------------------------------------------------------------------------------
function AnalyzePage(AddressPage: string; num_elem: Integer; PageAux: TStringList): Integer;
var
Page: TStringList;
LineNr: Integer;
Line: string;
MovieTitle, MovieAddress: string;
Elementos: Integer;
begin
if(pageAux.Count=0) then
begin
Page := TStringList.Create;
Page.Text := GetPage(AddressPage);
end else
begin
Page := PageAux;
end
if Pos('<title>SDG-ES.com', Page.Text) = 0 then
begin
ShowMessage('No se ha podido establecer la conexion.');
end else
begin
Elementos := num_elem;
LineNr := FindLine('<!--( Elementos )-->', Page, 0);
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
repeat
if(pos('- <a href="',Line)>0) then
begin
MovieAddress := TextBetween (Line, '<a href="', '">');
MovieTitle := TextBetween (Line, '', '</a>');
HTMLDecode(Movietitle);
PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);
Elementos := Elementos +1;
end
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
until Pos('<!--( Paginacion y hooks )-->', Line) > 0;
end;
result := Elementos;
end;
//------------------------------------------------------------------------------------
procedure AnalyzeMoviePage(Address: string);
var
Page: TStringList;
LineNr, LineNrAux, aux, numCds, found, multiplier: Integer;
Size, SizeLimit: Double;
Line: string;
Item: string;
Comments: string;
Actors: string;
Description: string;
isDual, isSubtitExt, isSonidoExt: Boolean;
Idiomas: string;
Subtit: String;
strAux: string;
delimiter: string;
SonidoExt: string;
TitOriginal: string;
begin
Comments := '';
Actors := '';
Description := '';
// URL
SetField(fieldURL, Address);
Page := TStringList.Create;
Page.Text := GetPage(Address);
// Titulo traducido
LineNr := FindLine('<!--( Elemento )-->', Page, 0);
LineNr := LineNr + 10;
Line := Page.GetString(LineNr);
if Pos('<img src', Line) > 0 then
begin
Item := TextBetween (Line, '<b>', ' <img');
end else
Item := TextBetween (Line, '<b>', '</b>');
begin
end
HTMLDecode(Item);
TitOriginal := AnsiMixedCase(AnsiLowerCase(Trim (Item)),' ');
SetField(fieldTranslatedTitle, TitOriginal);
// Picture
LineNr := LineNr + 9;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '<img src="', '" align');
GetPicture (BaseURL2 + Item);
// Descripcion
LineNrAux := FindLine('Descripci≤n:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '<br>', '');
HTMLDecode(Item);
SetField(fieldDescription, Trim (Item));
end
// Titulo original
LineNrAux := FindLine('Tφtulo original:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldOriginalTitle, RemoveDot(Trim (Item)));
end else
begin
SetField(fieldOriginalTitle, TitOriginal);
end
// Direccion
LineNrAux := FindLine('Direcci≤n:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldDirector, RemoveDot(Trim (Item)));
end
// Interpretacion
LineNrAux := FindLine('Interpretaci≤n:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldActors, RemoveDot(Trim (Item)));
end else
begin
LineNrAux := FindLine('IntΘrpretes:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldActors, RemoveDot(Trim (Item)));
end
end
// Genero
LineNrAux := FindLine('GΘnero:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldCategory, RemoveDot(Trim (Item)));
end
// Duracion
LineNrAux := FindLine('Duraci≤n:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', ' min');
HTMLDecode(Item);
SetField(fieldLength, Trim (Item));
end
// Pais
LineNrAux := FindLine('Paφs:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldCountry, RemoveDot(Trim (Item)));
end
// Year
LineNrAux := FindLine('A±o:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', '.');
HTMLDecode(Item);
SetField(fieldYear, RemoveDot(Trim (Item)));
end
// Video format
LineNrAux := FindLine('Video Codec', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldVideoFormat, Trim (Item));
end
// Resolucion
LineNrAux := FindLine('Resoluci≤n:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldResolution, Trim (Item));
end
// Bitrate video
LineNrAux := FindLine('Bitrate', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', 'Kbps');
HTMLDecode(Item);
SetField(fieldVideoBitrate, Trim (Item));
end
// Audio
isDual := False;
LineNrAux := FindLine('Audio Codec', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
if (pos('Audio Codec:',Line)>0) then // Un solo codec
begin
Item := TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldAudioFormat, Trim (Item));
// Bitrate Audio
LineNrAux := FindLine('Bitrate:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '</b>', 'Kbps');
HTMLDecode(Item);
SetField(fieldAudioBitrate, Trim (Item));
end
end
else begin // Varios codecs
isDual := True;
Idiomas := '';
Item := '';
Item := Item + Trim(TextBetween (Line, 'Codec ', ':'));
Idiomas := Idiomas + Item;
Item := Item + ' ' + Trim(TextBetween (Line, '</b>', ''));
// Bitrate Audio
LineNrAux := FindLine('Bitrate:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := Item + '(' + Trim(TextBetween (Line, '</b>', '')) + ')';
end
repeat
LineNrAux := FindLine('Audio Codec', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
strAux := Trim(TextBetween (Line, 'Codec ', ':'));
Item := Item + '. ' + strAux;
Idiomas := Idiomas + ', ' + strAux;
Item := Item + ' ' + Trim(TextBetween (Line, '</b>', ''));
// Bitrate Audio
LineNrAux := FindLine('Bitrate:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := Item + '(' + Trim(TextBetween (Line, '</b>', '')) + ')';
end
end
until (LineNrAux = -1);
HTMLDecode(Item);
SetField(fieldAudioFormat, Trim (Item));
end
end
// Subtitulos forzados
LineNrAux := FindLine('tulos forzados:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := '';
Item := Item + AnsiUpFirstLetter(TextBetween (Line, 'tulos ', ':'));
Item := Item + ' ' + TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldSubtitles, Trim (Item));
end
else begin
LineNrAux := FindLine('tulos espa±ol:', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
Item := '';
Item := Item + AnsiUpFirstLetter(TextBetween (Line, 'tulos ', ':'));
Item := Item + ' ' + TextBetween (Line, '</b>', '');
HTMLDecode(Item);
SetField(fieldSubtitles, Trim (Item));
end
end
// Idioma
LineNrAux := FindLine('Idioma', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux;
Line := Page.GetString(LineNr);
if (isDual) then
begin
Item := Idiomas;
end
else begin
Item := Trim(TextBetween (Line, '/> - ', '</td>'));
end
HTMLDecode(Item);
SetField(fieldLanguages, Trim (Item));
end
// Tamano archivo y numero cds
numCds := 0;
found := 0;
Size := 0;
Item := '';
isSubtitExt := False;
isSonidoExt := False;
repeat
LineNrAux := FindLine('ed2k.gif', Page, LineNr);
if (LineNrAux <> -1) then
begin
LineNr := LineNrAux + 1;
Line := Page.GetString(LineNr);
if ((pos('Subtitulos',Line)=0) and (pos('Subtφtulos',Line)=0)
and (pos('Carßtula',Line)=0) and (pos('Caratula',Line)=0)
and (pos('Sonido',Line)=0))then
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
delimiter := '';
if (pos('G', Line)>0) then
begin
delimiter := 'GB';
end
else if (pos('M', Line)>0) then
begin
delimiter := 'MB';
end
else if (pos('K', Line)>0) then
begin
delimiter := 'KB';
end
else
delimiter := '';
Item := TextBetween (Line, '">', delimiter);
Size := Size + StrToFloat(Trim(Item));
numCds := numCds + 1;
end
else if ((pos('Subtitulos',Line)>0) or (pos('Subtφtulos',Line)>0)) then
begin
isSubtitExt := True;
Subtit := TextBetween (Line, 'title="','">');
end
else if ((pos('Sonido',Line)>0)) then
begin
isSonidoExt := True;
SonidoExt := TextBetween (Line, 'title="','">');
end
end
until (LineNrAux = -1);
HTMLDecode(Item);
SizeLimit := 1024;
if ((delimiter='MB') and (Size > SizeLimit)) then
begin
Size := Size / SizeLimit;
delimiter := 'GB';
strAux := FloatToSTr(Size);
Delete(strAux,5,length(strAux)-4);
end
else
strAux := FloatToSTr(Size);
SetField(fieldSize, StrAux + ' ' + delimiter);
SetField(fieldDisks, IntToStr(numCds));
// Subtitulos externos
if (isSubtitExt) then
begin
Subtit := 'Fichero aparte (' + Subtit + ')' ;
HTMLDecode(Item);
SetField(fieldSubtitles, Trim (Subtit));
end
// Sonido externo
if (isSonidoExt) then
begin
SonidoExt := GetField(fieldAudioFormat) + '. Fichero aparte (' + SonidoExt + ')' ;
HTMLDecode(Item);
SetField(fieldAudioFormat, Trim (SonidoExt));
end
end;
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
begin
if CheckVersion(3,5,0) then
begin
MovieName := GetField(fieldOriginalTitle);
if MovieName = '' then
MovieName := GetField(fieldTranslatedTitle);
if MovieName <> '' then
begin
AnalyzeMultiplePages(SearchBaseURL + UrlEncode(MovieName));
end
else if Input('Importar de SDG', 'Introduzca el titulo de la pelicula:', MovieName) then
begin
if (Trim(MovieName)<> '') then begin
AnalyzeMultiplePages(SearchBaseURL + UrlEncode(MovieName));
end
end
end
else
ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.5.0)');
end.